<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <ul>
      <li>11</li>
      <li>22</li>
      <li>33</li>
    </ul>
    <script>
      //js语言,多范式
      //for,for in,while,do while :  命令式 强调过程 如何做?
      //forEach,map,reduce,filter,every,some ..:声明式 强调结果,做什么

      //forEach循环数组方法;
      //一.forEach的使用
      var arr = ["张三", "李四", "王五"];

      //第一个参数是 键值   第二个参数是  键名  第三个参数是循环的数组
      //   arr.forEach(function (item, key, arr) {
      //     console.log(item, key, arr);
      //   });

      /*  var lis = document.getElementsByTagName("li");
      console.log(lis);
      [...lis].forEach(function (item) {
        //报错  HTMLCollection伪数组没有forEach方法
        //此时转换伪数组为数组即可
        console.log(item);
        item.onclick = function () {
          console.log("点击了");
        };
      }); */

      /* var lis = document.querySelectorAll("li");
      console.log(lis);
      lis.forEach(function (item) {
        console.log(item);
        //NodeList伪数组有forEach方法可以直接使用
        item.onclick = function () {
          console.log("点击了");
        };
      }); */

      //实现一个自己的myForEach方法
      function myForEach(arr, fn) {
        //forEach内部需要循环数组
        for (i = 0; i < arr.length; i++) {
          // console.log(i);
          fn(arr[i], i, arr);
        }
      }

      var arr = ["张三", "李四", "王五"];
      myForEach(arr, function (item, key, arr) {
        //通过新参接受实参的值
        console.log(item, key, arr);
      });

      //把myForEach方法添加到所有数组方法里
      var arr = [];
      var arr = new Array(); //内置构造函数
      Array.prototype.myForEach = function () {
        for (var i = 0; i < this.length; i++) {
          fn(this[i], i, this); //调用 外部传入的函数,内部传入实参
        }
      };

      var arr = new Array("张三", "李四", "王五");
      arr.myForEach(function (item, key, Array) {
        console.log(item, key, arr);
      });
      console.log([]);
    </script>
  </body>
</html>
